package com.fx.ruankao.service;

import com.fx.ruankao.entity.QuestionBank;
import java.util.List;

/**
 * 题库服务接口
 */
public interface QuestionBankService {
    
    /**
     * 新增题目
     * @param questionBank 题目实体
     * @return 受影响的行数
     */
    int insert(QuestionBank questionBank);
    
    /**
     * 根据ID删除题目
     * @param id 题目ID
     * @return 受影响的行数
     */
    int deleteById(Integer id);
    
    /**
     * 更新题目
     * @param questionBank 题目实体
     * @return 受影响的行数
     */
    int update(QuestionBank questionBank);
    
    /**
     * 根据ID查询题目
     * @param id 题目ID
     * @return 题目实体
     */
    QuestionBank selectById(Integer id);
    
    /**
     * 查询所有题目
     * @return 题目列表
     */
    List<QuestionBank> selectAll();
    
    /**
     * 根据题目类型查询题目
     * @param questionType 题目类型
     * @return 题目列表
     */
    List<QuestionBank> selectByQuestionType(String questionType);
    
    /**
     * 根据科目查询题目
     * @param subject 科目
     * @return 题目列表
     */
    List<QuestionBank> selectBySubject(String subject);
    
    /**
     * 根据难度查询题目
     * @param difficulty 难度
     * @return 题目列表
     */
    List<QuestionBank> selectByDifficulty(String difficulty);
    
    /**
     * 批量删除题目
     * @param ids 题目ID数组
     * @return 受影响的行数
     */
    int batchDelete(Integer[] ids);
    
    /**
     * 批量导入题目
     * @param questionBanks 题目列表
     * @return 导入成功的数量
     */
    int batchImport(List<QuestionBank> questionBanks);
    
    /**
     * 随机获取指定数量的题目
     * @param count 题目数量
     * @param questionType 题目类型（可选）
     * @param subject 科目（可选）
     * @param difficulty 难度（可选）
     * @return 题目列表
     */
    List<QuestionBank> getRandomQuestions(int count, String questionType, String subject, String difficulty);
    
    /**
     * 查询题目数量
     * @return 题目数量
     */
    int countQuestions();
    
    /**
     * 根据条件统计题目数量
     * @param questionType 题目类型（可选）
     * @param subject 科目（可选）
     * @param difficulty 难度（可选）
     * @return 题目数量
     */
    int countQuestionsByCondition(String questionType, String subject, String difficulty);
}